Fix the IA64 build of the hypervisor.
authorKeir Fraser <keir.fraser@citrix.com>
Fri, 9 Oct 2009 07:54:25 +0000 (08:54 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Fri, 9 Oct 2009 07:54:25 +0000 (08:54 +0100)
This is completely untested, beyond confirming that it compiles.

Signed-off-by: Steven Smith <steven.smith@citrix.com>
xen/arch/ia64/xen/mm.c
xen/common/grant_table.c
xen/include/asm-ia64/grant_table.h
xen/include/asm-x86/grant_table.h

index 437ddbca6e1d8bb9b664ad934d844b0298e13a42..d2031dc10ef77e8189080077afeaa88401d6ac59 100644 (file)
@@ -3335,7 +3335,7 @@ arch_memory_op(int op, XEN_GUEST_HANDLE(void) arg)
                 gnttab_grow_table(d, xatp.idx + 1);
 
             if (xatp.idx < nr_grant_frames(d->grant_table))
-                mfn = virt_to_mfn(d->grant_table->shared[xatp.idx]);
+                mfn = virt_to_mfn(d->grant_table->shared_raw[xatp.idx]);
 
             spin_unlock(&d->grant_table->lock);
             break;
index db30aa03ce84dd81f838a25ab8b2ee46cfd97e51..1deac084732962cf51a4b24a4e0aabd520401f9e 100644 (file)
@@ -1754,7 +1754,7 @@ __acquire_grant_for_copy(
                blocks mappings of transitive grants. */
             is_sub_page = 1;
             *owning_domain = rrd;
-            act->gfn = INVALID_GFN;
+            act->gfn = -1ul;
         }
         else if ( sha1 )
         {
index 58aa635f46b99ea82a47f6ba76e5b1d1b2b9f653..c540be36c53300c48ac11eb67a040067b6b71ec8 100644 (file)
@@ -31,8 +31,12 @@ int guest_physmap_add_page(struct domain *d, unsigned long gpfn, unsigned long m
 /* Guest physical address of the grant table.  */
 #define IA64_GRANT_TABLE_PADDR  IA64_XMAPPEDREGS_PADDR(NR_CPUS)
 
-#define gnttab_shared_maddr(t, i)       (virt_to_maddr((t)->shared[(i)]))
-#define gnttab_shared_page(t, i)        (virt_to_page((t)->shared[(i)]))
+#define gnttab_shared_maddr(t, i)       (virt_to_maddr((t)->shared_raw[(i)]))
+#define gnttab_shared_page(t, i)        (virt_to_page((t)->shared_raw[(i)]))
+
+#define gnttab_status_maddr(t, i)       (virt_to_maddr((t)->status[(i)]))
+#define gnttab_status_mfn(t, i)       (virt_to_maddr((t)->status[(i)]) >> PAGE_SHIFT)
+#define gnttab_status_page(t, i)        (virt_to_page((t)->status[(i)]))
 
 #define ia64_gnttab_create_shared_page(d, t, i)                         \
     do {                                                                \
@@ -55,8 +59,26 @@ int guest_physmap_add_page(struct domain *d, unsigned long gpfn, unsigned long m
             ia64_gnttab_create_shared_page((d), (t), (i));      \
     } while (0)
 
+#define ia64_gnttab_create_status_page(d, t, i)                         \
+    do {                                                                \
+        BUG_ON((d)->arch.mm.pgd == NULL);                               \
+        assign_domain_page((d),                                         \
+                           IA64_GRANT_TABLE_PADDR + ((i) << PAGE_SHIFT), \
+                           gnttab_status_maddr((t), (i)));              \
+    } while (0)
+
+#define gnttab_create_status_page(d, t, i)                      \
+    do {                                                        \
+        share_xen_page_with_guest(gnttab_status_page((t), (i)), \
+                                  (d), XENSHARE_writable);      \
+        if ((d)->arch.mm.pgd)                                   \
+            ia64_gnttab_create_status_page((d), (t), (i));      \
+    } while (0)
+
 #define gnttab_shared_gmfn(d, t, i)                 \
     ((IA64_GRANT_TABLE_PADDR >> PAGE_SHIFT) + (i))
+#define gnttab_status_gmfn(d, t, i)                     \
+    (mfn_to_gmfn(d, gnttab_status_mfn(t, i)))
 
 #define gnttab_mark_dirty(d, f) ((void)f)
 
index 07e96b661b89332d32102b71bf28ce2490b80b95..f435fa08c9cacb5b9f4ca3baeec22323cca8b9e4 100644 (file)
@@ -44,7 +44,7 @@ int replace_grant_host_mapping(
     ((virt_to_maddr((t)->status[i]) >> PAGE_SHIFT))
 
 #define gnttab_status_gmfn(d, t, i)                     \
-    (mfn_to_gmfn(d, gnttab_status_mfn(d, t, i)))
+    (mfn_to_gmfn(d, gnttab_status_mfn(t, i)))
 
 #define gnttab_mark_dirty(d, f) paging_mark_dirty((d), (f))